package com.itheima;

import com.itheima.config.SpringConfig;
import com.itheima.dao.BookDao;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;


/**
 * Aop入门案例：
 * 1.导入aop的组坐标和aspectjweaver包，由于spring-context包会顺带aop包，所以只用导入后者
 * 2.定义一个aop包，写一个MyAspect类,然后里面定义一个method方法，就是共性方法
 * 3.现在要把aop类让Spring知道，要受Spring的控制
 *      1.类上加上@Component注解声明成为bean，但现在Spring目前只会把它当作简单的bean类，不会当成Aop类
 *      2.加上@Aspect注解，这样Spring才知道他是个Aop类，加载的时候要去读里面的东西
 *      3.在配置类中加上@EnableAspectJAutoProxy，告诉Spring我这里面有用注解开发的bean，相当于启动了aop类中的@Aspect这句话，而@Aspect告诉Spring她下面的类是aop类
 *
 *
 * Aop执行流程：
 *      1.Spring容器启动
 *      2.首先Spring先扫描所有切面配置中的切入点，（切入点就是切入点表达式），一定要是使用了的切入点，否则不读取
 *      3.初始化bean，判定bean中是否有方法满足切入点，如果没有，就简单的生成一个bean
 *      若匹配上了，根据动态代理技术生成一个增强了的动态代理对象
 */
public class App {

    public static void main(String[] args) {

        AnnotationConfigApplicationContext cx = new AnnotationConfigApplicationContext(SpringConfig.class);

        BookDao bookDao = cx.getBean(BookDao.class);

        bookDao.save();
    }
}
